package IT.DataAccess;

import IT.Entities.PlantillaActividad;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import java.util.logging.Level;
import java.util.logging.Logger;

public class DatPlantillaActividad implements IDatPlantillaActividad{
    private PlantillaActividad oActividad;
    private List<PlantillaActividad> oLista;
    private BDConexion oBase;
    
    private Connection oConexion;
    private CallableStatement oCst;    
    private ResultSet oRst;  
    
    public List<PlantillaActividad> Listar() {
        oLista=new ArrayList<PlantillaActividad>();
         
        try {
            oBase = new BDConexion();
            oConexion = oBase.getDataSource().getConnection();
            oBase = null;
            oCst = oConexion.prepareCall("{call usp_PlantillaActividadListar()}");
            oRst = oCst.executeQuery();

            while (oRst.next()) {
                oLista.add(new PlantillaActividad(oRst.getInt("cod_plaact_in"), oRst.getInt("ord_plaact_in"),
                        oRst.getString("nom_plaact_vc"), oRst.getString("des_plaact_vc"),oRst.getBoolean("apro_plaact_bo"),
                        oRst.getInt("est_plaact_in"), oRst.getString("Estado"),
                        oRst.getInt("cod_plaeta_in"),
                        oRst.getInt("tip_plaact_in"), oRst.getString("Tipo"),
                        oRst.getInt("tip_rspta_plaact_in"), oRst.getString("TipoRstpa"),
                        oRst.getInt("cod_ant_plaact_in"),oRst.getString("Predecesor"),
                        oRst.getBoolean("eje_plaact_bo"),
                        oRst.getInt("cantidad")));
            }
            oRst.close();
            oCst.close();
            oConexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(DatArea.class.getName()).log(Level.SEVERE, null, ex);
        }
         return oLista;
    }

    public PlantillaActividad Ind(int nCodigo) {
          oActividad=new PlantillaActividad();
         
        try {
            oBase = new BDConexion();
            oConexion = oBase.getDataSource().getConnection();
            oBase = null;
            oCst = oConexion.prepareCall("{call usp_PlantillaActividadInd(?)}");
            oCst.setInt(1, nCodigo);
            oRst = oCst.executeQuery();

            while (oRst.next()) {
                oActividad.setCod_plaact_in(oRst.getInt("cod_plaact_in"));
                oActividad.setOrd_plaact_in(oRst.getInt("ord_plaact_in"));
                oActividad.setNom_plaact_vc(oRst.getString("nom_plaact_vc"));
                oActividad.setDes_plaact_vc(oRst.getString("des_plaact_vc"));
                oActividad.setApro_plaact_bo(oRst.getBoolean("apro_plaact_bo"));
                oActividad.setEst_plaact_in(oRst.getInt("est_plaact_in"));
                oActividad.setEstado(oRst.getString("Estado"));
                oActividad.setCod_plaeta_in(oRst.getInt("cod_plaeta_in"));
                oActividad.setTip_plaact_in(oRst.getInt("tip_plaact_in"));
                oActividad.setTipo(oRst.getString("Tipo"));
                oActividad.setTip_rspta_plaact_in(oRst.getInt("tip_rspta_plaact_in"));
                oActividad.setTipoRstpa(oRst.getString("TipoRstpa"));
                
                oActividad.setCod_ant_plaact_in(oRst.getInt("cod_ant_plaact_in"));
                oActividad.setPredecesor(oRst.getString("Predecesor"));
                        
                oActividad.setEje_plaact_bo( oRst.getBoolean("eje_plaact_bo"));
                oActividad.setCantidad(oRst.getInt("cantidad"));
            }
            oRst.close();
            oCst.close();
            oConexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(DatArea.class.getName()).log(Level.SEVERE, null, ex);
        }
         return oActividad;
    }

    public List<PlantillaActividad> Ubi(int nEtapa) {
        oLista=new ArrayList<PlantillaActividad>();
         
        try {
            oBase = new BDConexion();
            oConexion = oBase.getDataSource().getConnection();
            oBase = null;
            oCst = oConexion.prepareCall("{call usp_PlantillaActividadUbi(?)}");
            oCst.setInt(1, nEtapa);
            oRst = oCst.executeQuery();

            while (oRst.next()) {
                oLista.add(new PlantillaActividad(oRst.getInt("cod_plaact_in"), oRst.getInt("ord_plaact_in"),
                        oRst.getString("nom_plaact_vc"), oRst.getString("des_plaact_vc"),oRst.getBoolean("apro_plaact_bo"),
                        oRst.getInt("est_plaact_in"), oRst.getString("Estado"),
                        oRst.getInt("cod_plaeta_in"),
                        oRst.getInt("tip_plaact_in"), oRst.getString("Tipo"),
                        oRst.getInt("tip_rspta_plaact_in"), oRst.getString("TipoRstpa"),
                        oRst.getInt("cod_ant_plaact_in"),
                        oRst.getString("Predecesor"),
                        oRst.getBoolean("eje_plaact_bo"),
                        oRst.getInt("cantidad")));
            }
            oRst.close();
            oCst.close();
            oConexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(DatArea.class.getName()).log(Level.SEVERE, null, ex);
        }
         return oLista;
    }
    
    public List<PlantillaActividad> Predecesor(int nEtapa){
         oLista=new ArrayList<PlantillaActividad>();
         
        try {
            oBase = new BDConexion();
            oConexion = oBase.getDataSource().getConnection();
            oBase = null;
            oCst = oConexion.prepareCall("{call usp_PlantillaActividadPredecesor(?)}");
            oCst.setInt(1, nEtapa);
            oRst = oCst.executeQuery();

            while (oRst.next()) {
                oActividad=new PlantillaActividad();
                oActividad.setCod_plaact_in(oRst.getInt("cod_plaact_in"));
                oActividad.setNom_plaact_vc(oRst.getString("nom_plaact_vc"));
                oLista.add(oActividad);
            }
            oRst.close();
            oCst.close();
            oConexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(DatArea.class.getName()).log(Level.SEVERE, null, ex);
        }
         return oLista;
    }
            
    public int Orden(int nEtapa) {
        int nOrden=0;
         try {
            oBase = new BDConexion();
            oConexion = oBase.getDataSource().getConnection();
            oBase = null;
            oCst = oConexion.prepareCall("{call usp_PlantillaActividadOrden(?,?)}");
    
            oCst.setInt(1, nEtapa);
            oCst.registerOutParameter(2, java.sql.Types.INTEGER);
            oCst.execute();
            
            nOrden=oCst.getInt(2);
            
            oCst.close();
            oConexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(DatArea.class.getName()).log(Level.SEVERE, null, ex);
        }
        return nOrden;
    }
     
    public void Insertar(PlantillaActividad ent) {
        try {
            oBase = new BDConexion();
            oConexion = oBase.getDataSource().getConnection();
            oBase = null;
            oCst = oConexion.prepareCall("{call usp_PlantillaActividadInsertar(?,?,?, ?,?,?, ?,?,?, ?)}");
    
            oCst.setInt(1, ent.getOrd_plaact_in());
            oCst.setString(2, ent.getNom_plaact_vc());
            oCst.setString(3, ent.getDes_plaact_vc());
            
            oCst.setBoolean(4, ent.isApro_plaact_bo());
            oCst.setInt(5, ent.getEst_plaact_in());
            oCst.setInt(6, ent.getCod_plaeta_in());
            
            oCst.setInt(7, ent.getTip_plaact_in());
            oCst.setInt(8, ent.getTip_rspta_plaact_in());
            
            oCst.setInt(9, ent.getCod_ant_plaact_in());
                    
            oCst.setBoolean(10, ent.isEje_plaact_bo());
            oCst.execute();
            
            oCst.close();
            oConexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(DatArea.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void Editar(PlantillaActividad ent) {
            try {
            oBase = new BDConexion();
            oConexion = oBase.getDataSource().getConnection();
            oBase = null;
            oCst = oConexion.prepareCall("{call usp_PlantillaActividadEditar(?,?,?, ?,?,?, ?,?,?, ?)}");
            
            oCst.setInt(1, ent.getCod_plaact_in());            
            oCst.setString(2, ent.getNom_plaact_vc());            
            oCst.setString(3, ent.getDes_plaact_vc());
            
            oCst.setBoolean(4, ent.isApro_plaact_bo());
            oCst.setInt(5, ent.getEst_plaact_in());            
            oCst.setInt(6, ent.getCod_plaeta_in());
            
            oCst.setInt(7, ent.getTip_plaact_in());
            oCst.setInt(8, ent.getTip_rspta_plaact_in());
            
            oCst.setInt(9, ent.getCod_ant_plaact_in());
            
            oCst.setBoolean(10, ent.isEje_plaact_bo());
            oCst.execute();
            
            oCst.close();
            oConexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(DatArea.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    public void EditarOrden(PlantillaActividad ent) {
        try {
            oBase = new BDConexion();
            oConexion = oBase.getDataSource().getConnection();
            oBase = null;
            oCst = oConexion.prepareCall("{call usp_PlantillaActividadEditarOrden(?,?)}");
            
            oCst.setInt(1, ent.getCod_plaact_in());
            oCst.setInt(2, ent.getOrd_plaact_in());
            oCst.execute();            
            oCst.close();
            oConexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(DatArea.class.getName()).log(Level.SEVERE, null, ex);
        } 
    }
    
    public void Eliminar(int nCodigo) {
          try {
            oBase = new BDConexion();
            oConexion = oBase.getDataSource().getConnection();
            oBase = null;
            oCst = oConexion.prepareCall("{call usp_PlantillaActividadEliminar(?)}");            
            oCst.setInt(1, nCodigo);                         
            oCst.execute();            
            oCst.close();
            oConexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(DatArea.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    //Aprobacion
    
    public List<PlantillaActividad> ListarApro(int nCodigo) {
        oLista=new ArrayList<PlantillaActividad>();
        
        try {
            oBase = new BDConexion();
            oConexion = oBase.getDataSource().getConnection();
            oBase = null;
            oCst = oConexion.prepareCall("{call usp_PlantillaActividadAproListar(?)}");
            oCst.setInt(1, nCodigo);
            oRst = oCst.executeQuery();

            while (oRst.next()) {
                oActividad=new PlantillaActividad();
                oActividad.setCod_plaact_in(oRst.getInt("cod_plaact_in"));
                oActividad.setCod_emp_in(oRst.getInt("cod_emp_in"));
                oLista.add(oActividad);
            }
            oRst.close();
            oCst.close();
            oConexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(DatArea.class.getName()).log(Level.SEVERE, null, ex);
        }
        return oLista;
    }

    public void GuardarApro(PlantillaActividad ent) {
        try {
            oBase = new BDConexion();
            oConexion = oBase.getDataSource().getConnection();
            oBase = null;
            oCst = oConexion.prepareCall("{call usp_PlantillaActividadAproGuardar(?,?)}");
            oCst.setInt(1, ent.getCod_plaact_in());
            oCst.setInt(2, ent.getCod_emp_in());
            oCst.execute();            
            oCst.close();
            oConexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(DatArea.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void EliminarApro(int nCodigo) {
        try {
            oBase = new BDConexion();
            oConexion = oBase.getDataSource().getConnection();
            oBase = null;
            oCst = oConexion.prepareCall("{call usp_PlantillaActividadAproEliminar(?)}");
            oCst.setInt(1, nCodigo);
            oCst.execute();            
            oCst.close();
            oConexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(DatArea.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
